// index.ts
// 获取应用实例
const app = getApp<IAppOption>()

// 云开发环境ID
const ENV_ID = 'cloud1-1gphd2vt3783c2f9';

Page({
  data: {
    images: [],
    userInfo: null,
    isLoggedIn: false,
    openid: '',
    loadingUserInfo: true,
    publicImages: [],
    isLoading: false
  },

  onLoad() {
    // 初始化云开发环境
    this.initCloud();
  },

  onShow() {
    // 页面显示时的逻辑，检查是否有新发布的图片
    const newImage = wx.getStorageSync('publishedImage');
    if (newImage) {
      // 清除发布标记
      wx.removeStorageSync('publishedImage');
      
      // 重新获取最新图片列表
      this.getPublicImages();
    }
    
    // 检查用户登录状态
    this.checkUserLoginStatus();
    
    // 获取公开图片列表
    this.getPublicImages();
  },
  
  // 初始化云开发环境
  async initCloud() {
    try {
      // 初始化云环境
      if (!wx.cloud) {
        console.error('请使用 2.2.3 或以上的基础库以使用云能力');
        return;
      }
      
      wx.cloud.init({
        env: ENV_ID,
        traceUser: true,
      });
      
      // 检查用户登录状态
      await this.checkUserLoginStatus();
      
      // 获取公开图片
      this.getPublicImages();
      
    } catch (error) {
      console.error('初始化云环境失败', error);
      wx.showToast({
        title: '初始化云环境失败',
        icon: 'none'
      });
    }
  },
  
  // 检查用户登录状态
  async checkUserLoginStatus() {
    try {
      // 调用云函数获取用户openid
      const loginRes = await wx.cloud.callFunction({
        name: 'login'
      });
      
      if (loginRes.result && loginRes.result.openid) {
        const openid = loginRes.result.openid;
        this.setData({ openid });
        
        // 查询用户信息
        await this.getUserInfoByOpenId(openid);
      } else {
        this.setData({ loadingUserInfo: false });
        console.error('获取用户openid失败');
      }
    } catch (error) {
      this.setData({ loadingUserInfo: false });
      console.error('检查用户登录状态失败', error);
    }
  },
  
  // 根据openid获取用户信息
  async getUserInfoByOpenId(openid: string) {
    try {
      const db = wx.cloud.database();
      const userRes = await db.collection('users').where({
        _openid: openid
      }).get();
      
      if (userRes.data && userRes.data.length > 0) {
        // 用户已存在，更新登录状态
        const userInfo = userRes.data[0];
        this.setData({
          userInfo,
          isLoggedIn: true,
          loadingUserInfo: false
        });
        
        // 存储用户信息到本地
        wx.setStorageSync('userInfo', userInfo);
        wx.setStorageSync('isLoggedIn', true);
      } else {
        // 用户不存在，清除登录状态
      this.setData({
          userInfo: null,
          isLoggedIn: false,
          loadingUserInfo: false
        });
        wx.removeStorageSync('userInfo');
        wx.removeStorageSync('isLoggedIn');
      }
    } catch (error) {
      this.setData({ loadingUserInfo: false });
      console.error('获取用户信息失败', error);
    }
  },
  
  // 获取公开图片列表
  async getPublicImages() {
    try {
      this.setData({ isLoading: true });
      
      const db = wx.cloud.database();
      const imagesRes = await db.collection('images')
        .where({ isPublic: true })
        .orderBy('createTime', 'desc')
        .limit(20)
        .get();
      
      if (imagesRes.data && imagesRes.data.length > 0) {
        // 使用云端真实图片数据
        this.setData({ 
          images: imagesRes.data,
          isLoading: false 
        });
      } else {
        // 没有图片数据
        this.setData({ 
          images: [],
          isLoading: false
        });
        
        wx.showToast({
          title: '暂无公开图片',
          icon: 'none'
        });
      }
    } catch (error) {
      console.error('获取公开图片失败', error);
      this.setData({ isLoading: false });
      
      wx.showToast({
        title: '获取图片失败',
        icon: 'none'
      });
    }
  },

  // 点击图片卡片
  onImageTap(e: any) {
    const id = e.currentTarget.dataset.id;
    const url = e.currentTarget.dataset.url;
    
    // 预览图片
    wx.previewImage({
      urls: this.data.images.map(item => item.imageUrl),
      current: url
    });
  },

  // 点击创建按钮
  onCreateTap() {
    // 检查是否已登录
    if (!this.data.isLoggedIn) {
      wx.showModal({
        title: '提示',
        content: '需要先登录才能创建图片，是否前往登录？',
        success: (res) => {
          if (res.confirm) {
            wx.navigateTo({
              url: '/pages/profile/profile'
            });
          }
        }
      });
      return;
    }
    
    // 已登录，跳转到创建页面
    wx.navigateTo({
      url: '/pages/create/create'
    });
  },

  // 下拉刷新
  async onPullDownRefresh() {
    // 刷新数据
    try {
      await this.getPublicImages();
      wx.stopPullDownRefresh();
    } catch (error) {
      console.error('刷新数据失败', error);
      wx.stopPullDownRefresh();
    }
  },

  // 上拉加载更多
  onReachBottom() {
    // 加载更多图片的逻辑
    wx.showToast({
      title: '加载更多...',
      icon: 'loading'
    });
    
    // 可以在这里实现分页加载
    // TODO: 实现分页加载逻辑
    
    setTimeout(() => {
      wx.hideToast();
    }, 1000);
  }
})
